import prettierConfig from 'eslint-config-prettier'
/**
 * ESLint 配置文件
 * 集成了 Vuetify 和 Prettier 的配置
 */
import vuetifyConfig from 'eslint-config-vuetify'
import prettierPlugin from 'eslint-plugin-prettier'

const vuetifyFlat = await vuetifyConfig()

export default [
  ...vuetifyFlat, // 引入 Vuetify 的扁平配置

  // 排除 library 目录，因为它们是独立的库，以及所有 Markdown 文件，还有测试报告文件
  {
    ignores: [
      'library/**/*',
      'docs/**/*',
      '**/*.md',
      'tests/reports/**/*', // 排除测试报告文件
      'test-results/**/*', // 排除测试报告文件
      'playwright-report/**/*', // 排除测试报告文件
      'srcPreloads/src/google-translate/**/*', // 第三方脚本/拷贝代码，忽略 ESLint
      'dist/**/*', // 排除构建输出文件
      'node_modules/**/*' // 排除 node_modules（虽然通常默认排除，但明确声明）
    ]
  },

  // 集成 Prettier 配置
  {
    languageOptions: {
      globals: {
        _pre_: 'readonly', // 表示 _pre_ 是一个全局变量
        NodeListOf: 'readonly', // DOM 类型
        HTMLElement: 'readonly', // DOM 类型
        Element: 'readonly', // DOM 类型
        DOMRect: 'readonly', // DOM 类型
        NodeJS: 'readonly' // DOM 类型
      }
    },
    plugins: {
      prettier: prettierPlugin // 使用 prettier 插件
    },
    rules: {
      ...prettierConfig.rules, // 关闭与 Prettier 冲突的规则
      'no-trailing-spaces': ['error', { skipBlankLines: true }],

      // 放宽高侵入规则，确保现有代码可一次性通过
      '@typescript-eslint/member-ordering': 'off', // 约束类成员声明顺序（字段/构造器/方法等）；关闭以避免大范围移动代码
      '@typescript-eslint/unified-signatures': 'off', // 合并可合并的函数重载签名；关闭保留现有重载写法
      '@typescript-eslint/consistent-type-imports': 'off', // 强制 type-only 导入/导出风格一致；关闭以兼容混合风格
      'perfectionist/sort-imports': 'off', // 强制按分组/字母排序 import；关闭避免大范围排序改动

      // unicorn 系规则放宽
      'unicorn/prefer-ternary': 'off', // 倾向使用三元而非简单 if/else；关闭以保留可读性
      'unicorn/prefer-add-event-listener': 'off', // 鼓励 addEventListener 替代 onXXX；关闭兼容现有写法
      'unicorn/no-array-for-each': 'off', // 不建议使用 forEach（偏向 for...of/可中断循环）；关闭继续允许
      'unicorn/no-array-callback-reference': 'off', // 不直接传递函数引用作为数组回调；关闭降低侵入性
      'unicorn/prefer-code-point': 'off', // 处理字符优先用 codePointAt；关闭避免不必要替换
      'unicorn/no-array-sort': 'off', // 禁用原地 Array#sort（可变）；关闭允许直接使用 sort
      'unicorn/no-useless-switch-case': 'off', // 移除无意义/重复的 switch case；关闭减少对旧代码噪音
      'unicorn/prefer-structured-clone': 'off', // 深拷贝优先 structuredClone；关闭兼容旧环境/Node 版本
      'unicorn/prefer-default-parameters': 'off', // 优先函数默认参数替代 ||/?? 赋值；关闭兼容多种写法
      'unicorn/prefer-number-properties': 'off', // 使用 Number.isNaN 等静态属性；关闭避免大范围替换
      'unicorn/prefer-single-call': 'off', // 偏好一次性创建并链式调用；关闭降低风格限制
      'unicorn/prefer-event-target': 'off', // DOM 事件优先标准 EventTarget API；关闭兼容旧代码/环境
      'unicorn/prefer-logical-operator-over-ternary': 'off', // 简单布尔选择用逻辑运算符替代三元；关闭保持显式表达

      // 将少量易触发但低风险的规则降级
      'prefer-const': 'warn',

      'prettier/prettier': [
        'error',
        {
          // 基础格式化配置
          singleQuote: true, // 使用单引号
          semi: false, // 不使用分号
          printWidth: 100, // 每行最大长度
          trailingComma: 'none', // 不使用尾随逗号
          arrowParens: 'avoid', // 箭头函数单参数时不使用括号
          bracketSpacing: true, // 对象字面量中的括号间添加空格
          endOfLine: 'auto', // 自动识别换行符
          singleAttributePerLine: false // 不强制每个属性单独一行
        }
      ]
    }
  },

  // preload 文件的特殊配置
  {
    files: ['srcPreloads/**/*.ts'], // 匹配所有 preload 目录下的 TypeScript 文件
    rules: {
      '@typescript-eslint/no-require-imports': 'off' // 允许使用 require 导入
    }
  }
]
